Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

548
Views
Excepción en el subproceso "Test worker" java.lang.IllegalStateException: el módulo con el despachador principal no se pudo inicializar

Oye, estoy teniendo este tipo de problema extraño. No entiendo por qué esto está causando en mi prueba unitaria. ¿Puede alguien por favor guiarme lo que falta en mi lado.

 Exception in thread "Test worker" java.lang.IllegalStateException: Module with the Main dispatcher had failed to initialize. For tests Dispatchers.setMain from kotlinx-coroutines-test module can be used at kotlinx.coroutines.internal.MissingMainCoroutineDispatcher.missing(MainDispatchers.kt:118) at kotlinx.coroutines.internal.MissingMainCoroutineDispatcher.isDispatchNeeded(MainDispatchers.kt:96) at kotlinx.coroutines.internal.DispatchedContinuationKt.resumeCancellableWith(DispatchedContinuation.kt:319) at kotlinx.coroutines.intrinsics.CancellableKt.startCoroutineCancellable(Cancellable.kt:30) at kotlinx.coroutines.intrinsics.CancellableKt.startCoroutineCancellable$default(Cancellable.kt:25) at kotlinx.coroutines.CoroutineStart.invoke(CoroutineStart.kt:110) at kotlinx.coroutines.AbstractCoroutine.start(AbstractCoroutine.kt:126) at kotlinx.coroutines.BuildersKt__Builders_commonKt.launch(Builders.common.kt:56) at kotlinx.coroutines.BuildersKt.launch(Unknown Source) at kotlinx.coroutines.BuildersKt__Builders_commonKt.launch$default(Builders.common.kt:47) at kotlinx.coroutines.BuildersKt.launch$default(Unknown Source) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at io.mockk.proxy.jvm.advice.MethodCall.call(MethodCall.kt:14) at io.mockk.proxy.jvm.advice.SelfCallEliminatorCallable.call(SelfCallEliminatorCallable.kt:14) .....

este es mi archivo de prueba de unidad. No entiendo por qué esto está causando el problema.

UnitTest.kt

 class XYZViewModelTest { @get:Rule val koinTestRule = KoinTestRule.create { modules(utilsModule) } @get:Rule val testInstantTaskExecutorRule: TestRule = InstantTaskExecutorRule() private lateinit var mockViewModel: XYZViewModel ..../// more declartions @Before fun setUp() { MockKAnnotations.init(this, relaxed = true) loadKoinModules(module { listOf( factory { mockSessionHelper } ) }) mockViewModel = spyk(XYZViewModel()) } ./// function }
over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Cuando realice pruebas unitarias, debe reemplazar Dispatchers.Main con un despachador diferente al que tiene de forma predeterminada, porque la implementación predeterminada de Dispatchers.Main no existe cuando no se ejecuta una aplicación completa. Para hacer esto, debe tener la kotlinx-coroutines-test si aún no la tiene:

 testImplementation 'org.jetbrains.kotlinx:kotlinx-coroutines-test:1.6.0'

Puede crear una regla de prueba de rutina para configurar esto antes y después de cada prueba, de modo que pueda simplificar el manejo de esto en cada una de sus clases de prueba.

Pon esto en su propio archivo:

 @ExperimentalCoroutinesApi class MainDispatcherRule(val dispatcher: TestDispatcher = StandardTestDispatcher()): TestWatcher() { override fun starting(description: Description?) = Dispatchers.setMain(dispatcher) override fun finished(description: Description?) = Dispatchers.resetMain() }

Y luego agregue la regla a su clase de prueba:

 @ExperimentalCoroutinesApi @get:Rule val mainDispatcherRule = MainDispatcherRule()

Sus pruebas que usan corrutinas deben usar y devolver la función runTest para que se vean así:

 @ExperimentalCoroutinesApi @Test fun fooTest() = runTest { //... }

Lo siento si me he perdido algo. Hay muchos cambios en la última versión 1.6.0 kotlinx-coroutines-test y todavía no estoy al día.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!